<?php
/**
 * API
 * 
 * @author Anton Zavidov
 * @package myLiveShop
 */
error_reporting(E_ALL);
$t=microtime(true);
header('Expires: Mon, 26 Jul 2002 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
//подключаем обработку исключений
include_once('core/exeptions.php');
//подключаем набор функций
include_once('core/functions.php');
//устанавливаем обработчик для програмных ощибок
set_error_handler('errorHandler',E_ALL);
//режим ядра
$core_mode='api';
//загружаем основу
import('core.core');
//подключаем настройки
import('core.config');
//устанавливаем домен для сессий
ini_set('session.cookie_domain',Config::_('info_domain'));
//собираем ядро
Core::load(array(
	'core.vars+',				//глобальные переменные
	'core.event+',				//диспетчер событий
	'core.file',				//модуль работы с файлами
	'core.db.mysql',			//класс базы данных mysql
	'core.model',				//базовый класс модели
	'core.controller',			//базовый класс контроллера
	'core.element',				//базовый класс сушьностей
	'core.session',				//класс сессий хранимых в базе
	'core.router',				//класс обработки урла
	'core.request',				//обработка запросов
    'core.requestlocal',		//обработка запросов при пакетной обработке
	'core.t'					//локализация
));
//проверяем передали пакет или одиночный запрос
$pack =  Request::getVar('pack',false);
//устанавливаем формат данных по умолчанию json
Vars::_(Router::VIEW_TYPE,'json');
//ссылка на БД
$db=Core::getDB();
$views = import('core.view.'.Vars::_(Router::VIEW_TYPE),true);
//$db->connect();

//определяем язык
Core::setLang();

//предварительные сервистные функции
Core::preService();

//запуск необходимого контроллера или хелпера
function start(){
	global $pack;
    Vars::_(Router::SHOP, Requestlocal::getString('s'));
	Vars::_(Router::CONTROLLER, Requestlocal::getString('c'));
    Vars::_(Router::HELPER, Requestlocal::getString('h', false));
	Vars::_(Router::VIEW, Requestlocal::getString('v'));
	Vars::_(Router::CUSTOM, Requestlocal::getVar('cu',false));
	Router::setShop(Vars::_(Router::SHOP));
	//имя вьюхи переданное в роутер
	$view=Vars::_(Router::VIEW);
	if (Vars::_(Router::CONTROLLER)){
		//запускаем контроллер переданный в роутер
		$controller=Core::getController(Vars::_(Router::CONTROLLER));
		if(is_callable(array($controller,$view))){
			$controller->$view();
		}elseif(!$pack){
			new CoreExeption('Невозможно вызвать метод '.$view.' контроллера '.Vars::_(Router::CONTROLLER),E_ERROR,__FILE__,__LINE__);
		}
	} elseif(Vars::_(Router::HELPER)){
		import('helper.'.Vars::_(Router::HELPER));
		$helperName = 'Helper'.ucfirst(Vars::_(Router::HELPER));
		if(is_callable($helperName."::".$view)){
			call_user_func($helperName."::".$view);
		}elseif(!$pack){
			new CoreExeption('Невозможно вызвать метод '.$view.' хелпера '.Vars::_(Router::HELPER),E_ERROR,__FILE__,__LINE__);
		}
	}
}
if(isset($_GET['debug'])) readfile("view/templates/debug.html");
if(!$pack){
    Vars::_(Requestlocal::REQUESTLOCAL, array());
    start();
}
else {
    //формируем массив результатов
	$result = array();
	foreach ($pack as $item){
		$data = array();
		parse_str($item,$data);
        Vars::_(Requestlocal::REQUESTLOCAL, $data);
		start();
		$result[]=$views->vars;
		$views->vars = array();
	}
	$views->setAll($result);
}

//закрываем базу
$db->close();

Core::pastService();
//закончиваем сессию
session_commit();
//переменные
if(!isset($GLOBALS['clean'])){
    $views->set('log',array(
        'time'=> number_format(microtime(true)-$t,4),
        'memory'=>number_format(memory_get_usage()/(1024*1024),3),
        'max_memory'=>number_format(memory_get_peak_usage()/(1024*1024),3),
        'log'=>CoreExeption::showErrorLog(isset($_GET['debug']) ? 'html':'json')
    ));
}
$views->show();